package com.kaba.xtzhgl.service.serviceImpl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kaba.bean.SysDept;
import com.kaba.xtzhgl.mapper.SysDeptMapper;
import com.kaba.xtzhgl.service.SysDeptService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author lvmengjie
 * @Date 2021/3/10
 * @Description TODO
 */
@Service
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {

    @Override
    public List<SysDept> querydept() {

        // 查找所有菜单数据
        List<SysDept> lists = baseMapper.querydept();
        // 把数据组合成树形结构
        List<SysDept> result = lists.stream()
                // 查找第一级菜单
                .filter(meun -> meun.getParentId() == 0)
                // 查找子菜单并放到第一级菜单中
                .map(menu -> {
                   menu.setChildren(getchildren(menu,lists));
                   return menu;
               })
                // 根据排序字段排序
               .sorted((menu1, menu2) -> {
                   return (menu1.getOrderNum() == null ? 0 : menu1.getOrderNum()) - (menu2.getOrderNum() == null ? 0 : menu2.getOrderNum());
               })
                // 把处理结果收集成一个 List 集合
                .collect(Collectors.toList());
        return result;
    }
    private List<SysDept> getchildren(SysDept root, List<SysDept> all){

        List<SysDept> children = all.stream()
                // 根据 父菜单 ID 查找当前菜单 ID，以便于找到 当前菜单的子菜单
                .filter(menu -> menu.getParentId() == root.getDeptId())
                // 递归查找子菜单的子菜单
                .map((menu) -> {
                   menu.setChildren(getchildren(menu,all));
                    return menu;
                })
                // 根据排序字段排序
                .sorted((menu1, menu2) -> {
                    return (menu1.getOrderNum() == null ? 0 : menu1.getOrderNum()) - (menu2.getOrderNum() == null ? 0 : menu2.getOrderNum());
                })
                // 把处理结果收集成一个 List 集合
                .collect(Collectors.toList());
        return  children;
    }


}
